package com.apobates.forum.toro.tuple.strategy;

import org.apache.commons.lang3.tuple.Triple;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 *
 * @param <L> 左对象的类型
 * @param <M> 中对象的类型
 * @param <R> 右对象的类型
 * @param <E> 中函数的参数类型
 * @param <U> 右函数的参数类型
 */
@FunctionalInterface
public interface TripleSupplyStrategy<L,M,R,E,U> {
    /**
     * 执行入口
     * @param leftObjFun
     * @param middleFun
     * @param rightFun
     * @param arguments
     * @return
     */
    Triple<L,M,R> apply(Supplier<L> leftObjFun, Function<E, M> middleFun, Function<U, R> rightFun, Map<String, String> arguments);
}
